package com.cskaoyan.javase.oop1._14block._3static._2classload.exercise;

/**
 * 读程序题
 * @since 17:14
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class TestStaticDemo {
    public static void main(String[] args) {
        staticMethod();
    }

    /*
        该句执行
        直接找本类中的无参构造器执行
        首先从上到下执行成员变量的显式赋值和构造代码块
        然后执行构造器中的代码
        尤其注意
        这时static int b的显式赋值还没有开始
        所以它只有默认值0

        概念辨析:
        一个类当中,代码块的执行顺序往往都是:
        静态代码块先执行
        然后执行构造代码块
        但是本类就是一个特殊情况
     */
    static TestStaticDemo ts = new TestStaticDemo();

    static {
        System.out.println("静态代码块");
    }

    {
        System.out.println("构造代码块");
    }

    public TestStaticDemo() {
        System.out.println("无参构造器");
        System.out.println("a=" + a + ",b=" + b);
    }

    public static void staticMethod() {
        System.out.println("静态成员方法");
    }

    int a = 666;
    static int b = 777;

    /*
        这里和上面创建自身对象的静态成员变量的唯一区别是:
        这里b的值 已经显式赋值为777了

     */
    static TestStaticDemo ts2 = new TestStaticDemo();
}